home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / amigaos4_only / ifxlite / imagefx3 / rexx / snapshot_engine.ifx < prev    next >
Text File  |  2004-08-03  |  8KB  |  310 lines

  1. /*
  2.  * $VER: Snapshot_Engine 3.0 (17.2.98)
  3.  *
  4.  * Arexx program for the ImageFX image processing system.
  5.  * Written by Thomas Krehbiel (from an idea by Bob Fisher)
  6.  *
  7.  * Take a directory of images, and reduce them to small thumbnail
  8.  * snapshot images, and place them on one or more images which are
  9.  * then saved out somewhere.  This script also renders the snapshot
  10.  * pages down to 16 color images for easy viewing.  We can also
  11.  * optionally stamp the name of the file at the bottom of each
  12.  * thumbnail.
  13.  *
  14.  * By default we make 640x400 24-bit renderings with a 5x5 grid
  15.  * of thumbnails.
  16.  *
  17.  * This script is just the "engine" of the snapshot routine; it takes
  18.  * a file of images supplied as a command line argument and snapshots
  19.  * them.
  20.  *
  21.  */
  22.  
  23. OPTIONS RESULTS
  24.  
  25. /*
  26.  * Useage:  Snapshot_Engine <title> <listfile>
  27.  */
  28. PARSE ARG sourcedir filelist .
  29.  
  30. SIGNAL ON BREAK_C
  31.  
  32. /* retreive defaults from any previous useage of this macro */
  33. destbase = GETCLIP('IFX_Snapshot_DefDest')
  34. numcols  = GETCLIP('IFX_Snapshot_Colors')
  35. gridsize = GETCLIP('IFX_Snapshot_Grid')
  36. width    = GETCLIP('IFX_Snapshot_Width')
  37. height   = GETCLIP('IFX_Snapshot_Height')
  38. labelit  = GETCLIP('IFX_Snapshot_Labels')
  39. grey     = GETCLIP('IFX_Snapshot_Grey')
  40. keepext  = GETCLIP('IFX_Snapshot_KeepExt')
  41. saveform = GETCLIP('IFX_Snapshot_SaveForm')
  42. saveopt  = GETCLIP('IFX_Snapshot_SaveOpts')
  43. spacing  = GETCLIP('IFX_Snapshot_Spacing')
  44. enhance  = GETCLIP('IFX_Snapshot_Enhance')
  45. doback   = GETCLIP('IFX_Snapshot_DoBack')
  46. backdrop = GETCLIP('IFX_Snapshot_Backdrop')
  47. doshadow = GETCLIP('IFX_Snapshot_DoShadow')
  48. red      = GETCLIP('IFX_Snapshot_Red')
  49. green    = GETCLIP('IFX_Snapshot_Green')
  50. blue     = GETCLIP('IFX_Snapshot_Blue')
  51.  
  52. /* some defaults - change as desired */
  53.  
  54. IF defdest  = '' THEN defdest  = "RAM:.Snap" /* default dest files */
  55. IF numcols  = '' THEN numcols  = 8           /* colors in renderings */
  56. IF gridsize = '' THEN gridsize = 5           /* thumbnail rows/cols */
  57. IF width    = '' THEN width    = 640         /* dest width */
  58. IF height   = '' THEN height   = 400         /* dest height */
  59. IF labelit  = '' THEN labelit  = 1           /* label each thumbnail? */
  60. IF grey     = '' THEN grey     = 0           /* convert to greyscale? */
  61. IF keepext  = '' THEN keepext  = 1           /* keep file extensions? */
  62. IF saveform = '' THEN saveform = 'ILBM'      /* save format */
  63. IF spacing  = '' THEN spacing  = 10          /* spacing between nails */
  64. IF enhance  = '' THEN enhance  = 1           /* enhance nails? */
  65. IF doback   = '' THEN doback   = 0           /* do backdrop texture? */
  66. IF backdrop = '' THEN backdrop = 'Textures/Leather'   /* backdrop texture */
  67. IF doshadow = '' THEN doshadow = 1           /* do shadowed nails? */
  68. IF red      = '' THEN red      = 128
  69. IF green    = '' THEN green    = 100
  70. IF blue     = '' THEN blue     = 140
  71.  
  72.  
  73. SELECT
  74.    WHEN numcols = 0 THEN numcols = 2
  75.    WHEN numcols = 1 THEN numcols = 4
  76.    WHEN numcols = 2 THEN numcols = 8
  77.    WHEN numcols = 3 THEN numcols = 16
  78.    WHEN numcols = 4 THEN numcols = 32
  79.    WHEN numcols = 5 THEN numcols = 64
  80.    WHEN numcols = 6 THEN numcols = 128
  81.    WHEN numcols = 7 THEN numcols = 256
  82.    WHEN numcols = 8 THEN numcols = 'DEEP'
  83.    WHEN numcols = 9 THEN numcols = 'PRINT'
  84.    OTHERWISE EXIT 0
  85.    END
  86.  
  87.  
  88. thumbxspace = (width / gridsize)
  89. thumbyspace = ((height-20) / gridsize)
  90.  
  91. thumbwidth = thumbxspace - spacing
  92. thumbheight = thumbyspace - spacing
  93.  
  94. picnum = 1
  95.  
  96.  
  97. /* okay, process the files */
  98.  
  99. IF ~OPEN(infile, filelist, 'Read') THEN DO
  100.    RequestNotify 'Cannot read file list' filelist ' - no files found?'
  101.    EXIT
  102.    END
  103.  
  104. IF numcols = 'DEEP' THEN DO
  105.    END
  106. ELSE IF numcols = 'PRINT' THEN DO
  107.    SetPrinter 'SuperPrefs'
  108.    END
  109. ELSE DO
  110.    SetRender 'Amiga'
  111.    Render Mode HIRES LACE
  112.    Render Colors numcols
  113.    Render Dither 1 2 0     /* floyd zigzag none */
  114.    END
  115.  
  116. Requesters Off    /* disable error requesters */
  117. Redraw Off
  118. Undo Off
  119.  
  120. Blend 100
  121. EdgeMode Normal
  122. Transparency Include 0 Exclude 0
  123.  
  124. /* force new buffer the first time: */
  125. x = 999
  126. y = 999
  127. pagenum = 0
  128.  
  129. DO WHILE ~EOF(infile)
  130.  
  131.    x = x + 1
  132.    IF x >= gridsize THEN DO
  133.       x = 0
  134.       y = y + 1
  135.       IF y >= gridsize THEN DO
  136.  
  137.          GetMain
  138.          IF rc = 0 THEN DO
  139.             IF numcols = 'DEEP' THEN DO
  140.                SaveBufferAs saveform destbase||RIGHT('000'||picnum,3) saveopt
  141.                END
  142.             ELSE IF numcols = 'PRINT' THEN DO
  143.                Printer Print
  144.                END
  145.             ELSE DO
  146.                Render Go
  147.                SaveRenderedAs saveform destbase||RIGHT('000'||picnum,3) saveopt
  148.                Render Close
  149.                END
  150.             END
  151.  
  152.          pagenum = pagenum + 1
  153.          picnum = picnum + 1
  154.  
  155.          IF numcols = 'PRINT' THEN DO
  156.             dpix = 100
  157.             dpiy = 100
  158.             aspx = 1
  159.             aspy = 1
  160.             END
  161.          ELSE DO
  162.             dpix = 100
  163.             dpiy = 100
  164.             aspx = 22
  165.             aspy = 26
  166.             END
  167.  
  168.          IF grey THEN CreateBuffer width height 'GREY' red green blue aspx aspy dpix dpiy FORCE
  169.          ELSE         CreateBuffer width height red green blue aspx aspy dpix dpiy FORCE
  170.  
  171.          IF doback THEN DO
  172.             Hook ApplyTexture backdrop 0 80 Shiny
  173.             END
  174.  
  175.          title = sourcedir||' ('||pagenum||')'
  176.  
  177.          ActiveColor 0     /* usually black */
  178.          Text 'topaz.font' 11 100 BOLD title
  179.          Blend 50
  180.          Point width%2+2 9
  181.          Blend 100
  182.          KillBrush
  183.  
  184.          ActiveColor 1     /* usually white */
  185.          Text 'topaz.font' 11 100 BOLD title
  186.          Point width%2 7
  187.          KillBrush
  188.  
  189.          Redraw
  190.          y = 0
  191.  
  192.          END
  193.       END
  194.  
  195.    nextfile = READLN(infile)
  196.    IF nextfile = "" THEN ITERATE
  197.    IF RIGHT(nextfile,5) = '.info' THEN ITERATE
  198.    Message nextfile
  199.  
  200.    xp = x*thumbxspace
  201.    yp = y*thumbyspace+20
  202.  
  203.    LoadBrush nextfile 1       /* 1 in case we find an anim */
  204.    FlattenLayers              /* new in V109 */
  205.  
  206.    IF rc = 0 THEN DO
  207.  
  208.       GetBrush
  209.       PARSE VAR result name w h d ax ay .
  210.  
  211.       IF grey THEN DO
  212.          IF (d > 1) THEN Color2Grey Luma
  213.          END
  214.  
  215.       IF (ax > 0) THEN h = h * ay % ax
  216.  
  217.       IF (w > h) THEN DO
  218.          nw = thumbwidth
  219.          nh = h * nw % w
  220.          IF (nh > thumbheight) THEN nh = thumbheight
  221.          END
  222.       ELSE DO
  223.          nh = thumbheight
  224.          nw = w * nh % h
  225.          IF (nw > thumbwidth) THEN nw = thumbwidth
  226.          END
  227.  
  228.       IF (w < thumbwidth) & (h < thumbheight) THEN
  229.          Scale nw nh FAST
  230.       ELSE
  231.          Scale nw nh
  232.  
  233.       /* a little enhancement - makes 'em stand out more */
  234.       IF enhance THEN DO
  235.          Contrast 10
  236.          UnsharpMask 8
  237.          END
  238.  
  239.       IF doshadow THEN DO
  240.          DrawMode Darken
  241.          EdgeMode FeatherIn 4
  242.          Point xp+thumbxspace%2+4 yp+thumbyspace%2+4
  243.          DrawMode Normal
  244.          EdgeMode Normal
  245.          END
  246.  
  247.       Point xp+thumbxspace%2 yp+thumbyspace%2
  248.       KillBrush
  249.  
  250.       END
  251.  
  252.    IF labelit THEN DO
  253.  
  254.       /* strip path and optionally the trailing extension */
  255.       n = LASTPOS('/', nextfile) + 1
  256.       label = SUBSTR(nextfile,n)
  257.       IF ~keepext THEN DO
  258.          n = 1
  259.          DO WHILE n > 0
  260.             n = LASTPOS('.', label)
  261.             IF (n > 0) THEN label = LEFT(label,n-1)
  262.             END
  263.          END
  264.  
  265.       ActiveColor 0     /* usually black */
  266.       Text 'topaz.font' 8 100 label
  267.       Blend 50
  268.       Point xp+thumbxspace%2+1 yp+thumbheight-6
  269.       Blend 100
  270.       KillBrush
  271.  
  272.       ActiveColor 1     /* usually white */
  273.       Text 'topaz.font' 8 100 label
  274.       Point xp+thumbxspace%2 yp+thumbheight-7
  275.       KillBrush
  276.  
  277.       END
  278.  
  279.    Redraw xp yp thumbxspace thumbyspace
  280.  
  281.    END
  282.  
  283. IF (x > 0) | (y > 0) THEN DO
  284.    IF numcols = 'DEEP' THEN DO
  285.       SaveBufferAs saveform destbase||RIGHT('000'||picnum,3) saveopt
  286.       END
  287.    ELSE IF numcols = 'PRINT' THEN DO
  288.       Printer Print
  289.       END
  290.    ELSE DO
  291.       Render Go
  292.       SaveRenderedAs saveform destbase||RIGHT('000'||picnum,3) saveopt
  293.       Render Close
  294.       END
  295.    END
  296.  
  297. KillBuffer Force
  298.  
  299. BREAK_C:
  300.  
  301. CALL CLOSE(infile)
  302.  
  303. KillBrush
  304. Undo On
  305. Redraw On
  306. Requesters On
  307.  
  308. EXIT
  309.  
  310.